from otree.api import * doc = """ Base app – only treatment display. """ # ===================================================== # KONŠTANTY # ===================================================== class C(BaseConstants): NAME_IN_URL = 'base' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 # ===================================================== # MODELY # ===================================================== class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): is_judge = models.BooleanField(initial=False) pgg_group = models.IntegerField(initial=0) subgroup = models.IntegerField(initial=0) # ===================================================== # STRÁNKY # ===================================================== class Intro(Page): def vars_for_template(self): return dict( treatment=self.session.config.get('treatment_type') ) class SetupWaitPage(WaitPage): def after_all_players_arrive(self): players = self.subsession.get_players() treatment = self.session.config.get('treatment_type') # reset for p in players: p.is_judge = False p.pgg_group = 0 p.subgroup = 0 # ------------------ # JUDGES # ------------------ if treatment in ['human_judge', 'humanAI_judge']: for p in players: if p.id_in_subsession == 1: p.is_judge = True p.subgroup = 1 elif p.id_in_subsession == 2: p.is_judge = True p.subgroup = 2 normal_players = [p for p in players if not p.is_judge] else: normal_players = players # ------------------ # PGG GROUPS # ------------------ import random random.shuffle(normal_players) group_id = 1 for i in range(0, len(normal_players), 4): for p in normal_players[i:i+4]: p.pgg_group = group_id group_id += 1 # ------------------ # SUBGROUPS # ------------------ num_pgg_groups = (group_id - 1) half_pgg_groups = num_pgg_groups // 2 for p in normal_players: if p.pgg_group <= half_pgg_groups: p.subgroup = 1 else: p.subgroup = 2 class SetupInfo(Page): def vars_for_template(self): return dict( players=self.subsession.get_players(), treatment=self.session.config.get('treatment_type'), ) # ===================================================== # SEKVENCIA # ===================================================== page_sequence = [ Intro, SetupWaitPage, SetupInfo, ]